home *** CD-ROM | disk | FTP | other *** search
- *************************************
- * CopyMemQuicker060 Beep *
- * Include File V1.0 *
- * written by Dirk Busse *
- * 19. Sep. 1998 *
- *************************************
-
- PatchStart
-
- move.l a6,-(sp)
- movea.l intbase,a6
- move.l a0,-(sp)
- move.l a1,-(sp)
- move.l d0,-(sp)
- move.l #0,a0
- jsr _LVODisplayBeep(a6)
- move.l (sp)+,d0
- movea.l (sp)+,a1
- movea.l (sp)+,a0
- movea.l (sp)+,a6
-
- tst.l d0
- beq.b squit
- move.w a1,d1 ;Zieladresse nach d1 (nur die ersten zwei Bits werden benötigt)
- btst #0,d1
- beq.b .skip1
- move.b (a0)+,(a1)+ ;Zieladresse auf EVEN setzen
- subq.l #1,d0
- beq.b squit
- move.w a1,d1
- .skip1 btst #1,d1
- beq.b .skip2
- cmpi.l #1,d0
- bne.b .two
- move.b (a0)+,(a1)+
- rts
-
- .two move.w (a0)+,(a1)+ ;Zieladresse auf LONG setzen
- subq.l #2,d0
- beq.b squit
- .skip2
- cmpi.l #%0000100000010000,d0 ;prüfen, ob d0 >2064
- bpl.b bigmove
-
- smlmove move.l d0,d1
- lsr.w #2,d1 ;d0 ist hier nur noch maximal 12Bit lang
- beq.b .nolong
- .loop move.l (a0)+,(a1)+
- subq.w #1,d1
- bne.b .loop
-
- .nolong btst #1,d0
- beq.b .skip
- move.w (a0)+,(a1)+ ;letztes Word uebertragen
- .skip btst #0,d0
- beq.b squit
- move.b (a0)+,(a1)+ ;letztes Byte uebertragen
- squit rts
-
- bigmove btst #0,d0
- beq.b .skip1
- subq.l #1,d0
- move.b (a0,d0.l),(a1,d0.l) ;letztes Byte übertragen
- .skip1 btst #1,d0
- beq.b .skip2
- subq.l #2,d0
- move.w (a0,d0.l),(a1,d0.l) ;letztes Word übertragen
- .skip2 lsr.l #2,d0 ;jetzt ist d0 durch 4 teilbar
- jmp bigmo16
-
- cnop 0,4
- **************************************************************************
-
- Quickest
- move.l a6,-(sp)
- movea.l intbase,a6
- move.l a0,-(sp)
- move.l a1,-(sp)
- move.l d0,-(sp)
- move.l #0,a0
- jsr _LVODisplayBeep(a6)
- move.l (sp)+,d0
- movea.l (sp)+,a1
- movea.l (sp)+,a0
- movea.l (sp)+,a6
-
- lsr.l #2,d0
- cmpi.l #%0000001000000100,d0 ;prüfen, ob d0 > 2064/4
- bpl.b bigmo16
-
- smlmovQ tst.w d0 ;d0 ist hier nur noch maximal 10 Bit lang
- beq.b squitQ
- sloopQ move.l (a0)+,(a1)+
- subq.w #1,d0
- bne.b sloopQ
- squitQ rts
-
- bigmo16 move.w a1,d1
- btst #2,d1
- beq.b .skip1
- subq.l #1,d0 ;Zieladresse auf 8-Byte-Block legen
- move.l (a0)+,(a1)+
- move.w a1,d1
- .skip1 btst #3,d1
- beq.b dest16
- subq.l #2,d0 ;Zieladresse auf 16-Byte-Block legen
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- dest16 move.w a0,d1
- andi.b #15,d1
- bne.b bigmovQ ;wenn Quelladresse nicht im 16-Byte-Block liegt
-
- move.l d0,d1
- lsr.l #5,d1
- .loop move16 (a0)+,(a1)+
- move16 (a0)+,(a1)+
- move16 (a0)+,(a1)+
- move16 (a0)+,(a1)+
- move16 (a0)+,(a1)+
- move16 (a0)+,(a1)+
- move16 (a0)+,(a1)+
- move16 (a0)+,(a1)+
- subq.l #1,d1
- bne.b .loop
- and.w #%0000000000011111,d0 ;die oberen 16 Bits werden ab hier nichtmehr berücksichtigt
- bne.b sloopQ
- rts
-
- bigmovQ move.l d0,d1
- lsr.l #4,d1
- .loop move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- subq.l #1,d1
- bne.b .loop
- and.w #%0000000000001111,d0 ;die oberen 16 Bits werden ab hier nichtmehr berücksichtigt
- bne.b sloopQ
- rts
-
- cnop 0,4
-
- intbase
- dc.l $0
-
- PatchEnd
-
-